package com.jjyou.mergedemo;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Toast;

import com.jjyou.mergesdk.JJYXCode;
import com.jjyou.mergesdk.JJYXSDK;
import com.jjyou.mergesdk.bean.InitResult;
import com.jjyou.mergesdk.bean.LogoutResult;
import com.jjyou.mergesdk.bean.PayParams;
import com.jjyou.mergesdk.bean.PayResult;
import com.jjyou.mergesdk.bean.RoleData;
import com.jjyou.mergesdk.bean.UToken;
import com.jjyou.mergesdk.bean.UserExtraData;
import com.jjyou.mergesdk.interfaces.DefaultJJYSDKListener;
import com.jjyou.mergesdk.interfaces.IRealNameCallback;
import com.jjyou.mergesdk.interfaces.IRedPacketCallback;
import com.jjyou.mergesdk.interfaces.IUserExtraCallback;
import com.jjyou.mergesdk.interfaces.IexitCallback;
import com.jjyou.mergesdk.plugin.JJYXPay;
import com.jjyou.mergesdk.plugin.JJYXUser;
import com.jjyou.mergesdk.ui.dialog.LoginSuccessWindow;
import com.jjyou.mergesdk.utils.Logs;
import com.sdk.exampleqp.R;

import java.util.Random;
import java.util.UUID;

/**
 特别注意:
        1 母包动态权限需要在用到时再申请 请不要启动立即申请权限
        2 SDK接口需要在主线程中调用

 第1步：配置SDK的出包参数 assets/jjyx_developer_config.properties

 第2步：将demo中libs下面的资源拷贝到您工程下libs目录下

 第3步：游戏中的AndroidManifest.xml文件中application节点的android:name属性一定要设置为com.jjyou.mergesdk.JJYXApplication

 第4步：接入以下代码部分
*/


public class MainActivity extends Activity {

    String userId;
    String token;


    //生命周期
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //注册统一回调
        JJYXSDK.getInstance().setSDKListener(new DefaultJJYSDKListener(){
            @Override
            public void onInitResult(InitResult result) {
                if ( result.getCode()==0 ){
                    //注意：要求SDK初始化成功后游戏才可以继续往下执行
                    tip("初始化成功");
                }else {
                    //初始化错误不要继续往下走了 建议错误的时候显示 msg 和code 出来
                    tip("初始化失败  mag="+result.getMsg()+"   code=="+result.getCode());
                }
            }

            @Override
            public void onLoginResult(UToken authResult) {
                if(authResult.getCode()==0){
                    userId=authResult.getUserID();
                    token=authResult.getToken();
//                    String extra = authResult.getExtra();//专服标识 忽略
                    tip("登录成功  userId=="+userId +"   token=="+token);
                }else{
                    //错误码没有一个对照表， 所以建议错误的时候显示 msg 和code 出来
                    tip("登录失败  mag="+authResult.getMsg()+"   code=="+authResult.getCode());
                }
            }

            @Override
            public void onPayResult(PayResult result) {
                switch (result.getCode()){
                    case JJYXCode.CODE_PAY_COMPLETE:
                        //注意：支付完成不等于支付成功，必须以cp服务器为准
                        tip("支付完成  orderID=="+result.getOrderID());
                        break;
                    case JJYXCode.CODE_PAY_CANCEL:
                        tip("支付取消  orderID=="+result.getOrderID());
                        break;
                    default:
                        //建议错误的时候显示 msg 和code 出来
                        tip("失败   code=="+result.getCode()+"msg=="+result.getMsg()+"    orderID=="+result.getOrderID());
                        break;
                }
            }

            //cp调用SDK退出登录接口的回调
            @Override
            public void cpLogout(LogoutResult result) {
                //执行用户退出操作
                if (result.getCode()==0){
                    userId="";
                    token="";
                    tip("退出成功");
                }else {
                    //错误码没有一个对照表， 所以建议错误的时候显示 msg 和code 出来
                    tip("退出失败  mag="+result.getMsg()+"   code=="+result.getCode());
                }

            }



            //********************** 以下接口为 SDK主动回调CP ********************

            //sdk 主动要求切换当前账号
            @Override
            public void onSdkSwitchAccount(UToken authResult) {
                //cp执行操作：返回到游戏登录页 -> 清理当前用户数据 -> 用新的账号登录 （和onLoginResult回调一致 CP拿到账号后验证登录并拉去服务器列表）
                userId=authResult.getUserID();
                token=authResult.getToken();
//                    String extra = authResult.getExtra();//专服标识 忽略
                tip("SDK要求切换登录  userId=="+userId +"   token=="+token);
            }

            //sdk 主动回调退出登录
            @Override
            public void sdkLogout() {
                //cp 执行操作：返回到游戏登录页 -> 清理当前用户数据 -> 调起登录;
                tip("用户点击注销，游戏需要清理数据并回调登录首页");
                userId="";
                token="";
                JJYXUser.getInstance().login();
            }


        });


        JJYXSDK.getInstance().init(this);
        JJYXSDK.getInstance().onCreate(savedInstanceState);
    }




    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if ((keyCode == KeyEvent.KEYCODE_BACK)) {

            JJYXUser.getInstance().exit(new IexitCallback() {
                @Override
                public void onExitFinish(int ResultCode) {
                    switch (ResultCode){
                        case JJYXCode.CODE_APSDKExitResultCodeExitGame:
                            //退出游戏
                            tip("退出游戏");
                            break;
                        case JJYXCode.CODE_APSDKExitResultCodeCloseWindow:
                            //取消
                            tip("取消");
                            break;
                        case JJYXCode.CODE_APSDKExitResultCodeError:
                            //调取对话框失败
                            //*****注意： 当退出对话框拉起失败的时候 游戏一定要显示自定的退出对话框，  很重要！！！！！！
                            tip("显示自己的对话框");
                            break;
                    }
                }
            });

            return false;
        }else {
            return super.onKeyDown(keyCode, event);
        }

    }




    public void onclick(View view){
        switch (view.getId()){
            case R.id.bt_login:
                //游戏调起SDK登录
                JJYXUser.getInstance().login();
                break;
            case R.id.bt_pay:

                //游戏调起SDK支付
                PayParams data=new PayParams();
                data.setBuyNum(1);//购买数量
                data.setCoinNum(100);//获得的虚拟货币数量 比如100元宝
                data.setExtension("12345678");//扩展参数,该参数会在支付成功后原样回调到cp 服务器接口
                data.setCporderID(String.valueOf(System.currentTimeMillis()));//模拟订单号 接入时请填真实订单号
                data.setPrice(100);//单位是分， 最少100(也就是1元钱)
                data.setProductDesc("阮月弯刀是自强的刀");//商品描述
                data.setProductId("8081");//商品ID
                data.setProductName("阮月弯刀");//商品名称
                data.setRoleId("u154251234");//角色ID
                data.setRoleLevel("12");//角色等级
                data.setRoleName("死神方便");//角色名称
                data.setServerId("1");//服务器ID
                data.setServerName("王者服");//服务器名称
                data.setTime(System.currentTimeMillis());//当前时间戳 毫秒
                data.setUserID(userId);//我方返回的uid ，注意函数是：setUserID()   而不是：setSdkUserID()
                JJYXPay.getInstance().pay(data);
                break;
            case R.id.bt_switch:
                //游戏主动切换用户的按钮
                JJYXUser.getInstance().logout();
                break;
            case R.id.bt_logout:
                //游戏主动调用SDK退出用户
                JJYXUser.getInstance().logout();
                break;
            case R.id.bt_exit:
                //游戏退出按钮
                JJYXUser.getInstance().exit(new IexitCallback() {
                    @Override
                    public void onExitFinish(int ResultCode) {
                        switch (ResultCode){
                            case JJYXCode.CODE_APSDKExitResultCodeExitGame:
                                //退出游戏
                                tip("退出游戏");
                                break;
                            case JJYXCode.CODE_APSDKExitResultCodeCloseWindow:
                                //取消
                                tip("取消");
                                break;
                            case JJYXCode.CODE_APSDKExitResultCodeError:
                                //调取对话框失败
                                //*****注意： 当退出对话框拉起失败的时候 游戏一定要显示自定的退出对话框，  很重要！！！！！！
                                tip("显示自己的对话框");
                                break;
                        }
                    }
                });
                break;
            case R.id.bt_submit:
                //角色数据上报
                UserExtraData userExtraData=new UserExtraData();
                userExtraData.setServerID("1");
                userExtraData.setServerName("王者服");
                userExtraData.setRoleName("死神方便");

//              public static final int TYPE_SELECT_SERVER = 1;			//选择服务器
//              public static final int TYPE_CREATE_ROLE = 2;			//创建角色
//              public static final int TYPE_ENTER_GAME = 3;			//进入游戏
//              public static final int TYPE_LEVEL_UP = 4;				//等级提升
//              public static final int TYPE_EXIT_GAME = 5;				//退出游戏
                //数据同步的类型，有些sdk 需要区分数据的类型
                userExtraData.setDataType(UserExtraData.TYPE_ENTER_GAME);//默认
                userExtraData.setMoneyNum(800);//用户金币余额
                userExtraData.setRoleID("u154251234");//角色id
                userExtraData.setUserId(userId);//我方返回的uid.   注意函数是setUserId   而不是setSdkUserId
                userExtraData.setRoleLevel("12");//角色等级
                userExtraData.setRoleCreatetimer(System.currentTimeMillis());//角色创建时间
                JJYXUser.getInstance().submitExtraData(userExtraData, new IUserExtraCallback() {
                    @Override
                    public void onUserExtraCallback(int ResultCode) {
                        switch (ResultCode){
                            case JJYXCode.GAME_ROLE_SUCCESS:
                                tip("同步数据成功");
                                break;
                            case JJYXCode.GAME_ROLE_FAIL:
                                tip("同步数据失败");
                                break;
                        }
                    }
                });
                break;


        }
    }


    private void tip(String msg){
//        Logs.i( msg );
        Logs.i( Thread.currentThread().getName() );
        Toast.makeText( this, msg, Toast.LENGTH_SHORT).show();
    }



    //生命周期
    @Override
    protected void onStart() {
        super.onStart();
        JJYXSDK.getInstance().onStart();
    }

    @Override
    protected void onPause() {
        super.onPause();
        JJYXSDK.getInstance().onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        JJYXSDK.getInstance().onResume();
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        JJYXSDK.getInstance().onRestart();
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        JJYXSDK.getInstance().onNewIntent(intent);
    }

    @Override
    protected void onStop() {
        super.onStop();
        JJYXSDK.getInstance().onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        JJYXSDK.getInstance().onDestroy();
    }

    @Override
    public void onBackPressed() {
//        super.onBackPressed();
        JJYXSDK.getInstance().onBackPressed();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        JJYXSDK.getInstance().onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        JJYXSDK.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(newBase);
        JJYXSDK.getInstance().attachBaseContext(newBase);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        JJYXSDK.getInstance().onConfigurationChanged(newConfig);
    }




}
